Bochs 相关
已知 Debian11 repo 里面的 bochs 有问题,程序启动的时候会有类似下面的报错:
bx_dbg_read_linear: physical memory read error (phy=0x0000322f3530, lin=0x00000000322f3530) Next at t=668577 (0) [0x0000fffffff0] f000:fff0 (unk. ctxt): jmpf 0xf000:e05b ; ea5be000f0
StackOverFlow 上也有人讨论了 这个问题,但没找到原因,给出的解决方法是自己编译一个。
查了查这个包的历史,发现 Debian 的 package builder 在把 2.6.9+dfsg-3 (main) [buster] 更新到 2.6.11+dfsg-4 (main) [bullseye] (更新记录) 时引入了 很多和 BIOS 相关的 patch,而 buster 上使用 apt 安装的 bochs 可以正常使用,所以这个问题可能由这些新引进的 patch 引起。注意到其中一个 patch 和 BIOS ROM 有关,猜测问题可能和这个 patch 有关 (未做验证)。
所以,要使用的话只能自己从源码编译,以在 Debian11 (Gnome) 上编译 bochs-2.6.11 为例。
安装依赖后,进入源码目录:
sudo apt install build-essential libgtk2.0-dev libreadline-dev cd bochs-2.6.11
关于依赖部分:
- libgtk2.0-dev 是 debugger-gui 必须的依赖,而 libgtk-3-dev 不是:
- 文档里关于
--enable-debugger-gui
这个编译选项的描述是: This feature is supported on Windows hosts and on hosts with GTK2/GTK3 installed ,在使用--enable-debugger
选项以后,--enable-debugger-gui
选项自动被启用。 - 看文档的意思是 GTK2/GTK3 都可以。但是,经过实测,2.6.11 和 2.7 两个版本的代码只有在安装 libgtk2.0-dev 的情况下,配置编译选项时才不会报 configure: WARNING: The Bochs debugger gui cannot be compiled here, disabling it 。
- 文档里关于
- libreadline-dev 是编译选项
--enable-readline
必须的依赖,可以让 debugger 运行在命令行下。
配置编译选项:
./configure \ --prefix=$HOME/.local/opt/bochs-2.6.11-bin \ --enable-readline \ --enable-debugger
这个配置对应的完整编译选项是:
./configure \ --prefix=$HOME/.local/opt/bochs-2.6.11-bin \ --enable-readline\ --enable-debugger --enable-debugger-gui --enable-iodebug \ --with-x11 \ --enable-xpm \ --enable-show-ips \ --enable-logging \ --enable-assert-checks \ --enable-cpu-level=6 \ --enable-fpu \ --enable-alignment-check \ --enable-a20-pin \ --enable-large-ramfile \ --enable-cdrom \ --enable-pci
需要注意,尽管 --with-x11
是 Linux 平台下的默认选项,但如果配置时使用了 --with-sdl2
但没有使用 --with-x11
,那么 --with-x11
并不会被自动加上,因为 debugger-gui 的依赖已经被 --with-sdl2
满足了。
即,在配置编译选项时,如果没有显式地使用官方文档 编译选项 一节的 Configure Options to Select the Display Library 表中的选项,那么默认使用 --with-x
;一旦显式地使用了任意一个选项,要想启用 --with-x
就必须再次显式地写出来。
此时,使用 display_library: x, options="gui_debug"
启动 bochs 会报 display library 'x' not available ,因为在编译时 bochs 没有支持 x。在安装 libsdl2-dev 这个 sdl2 的依赖包以后,可以正常使用 display_library: sdl2, options="gui_debug"
启动 bochs。
要同时启用 sdl2 和 x 的支持需要把两个选项同时写上,即 --with-x --with-sdl2
。
编译并安装:
make -j2 && make install
得到的 $HOME/.local/opt/bochs-2.6.11-bin/bin/bochs 即是最终可以运行的 bochs 程序。